#include <stdio.h>

#define Size 4

#define ArraySize(a) sizeof(a) / sizeof(a[0])

//数组名在作为函数参数传递时表现为指针：地址是数组首元素的地址
void PrintArray(int *a)
{
    printf("size : %ld\n",sizeof(a));
    for(int i = 0; i < Size; i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");
}

// int main()
// {
//     // int a[Size] ={1,2,3,4};
//     // //指针的数据类型代表它的步长
//     // int *p = a;
//     // p++;
//     // printf("%d\n",*p);
//     // return 0;

//     int a[Size] ={1,2,3,4};
//     for(int i = 0; i < Size; i++)
//     {
//         printf("%d ",*(a + i)); //通过指针访问数组元素
//         // a[i] == *(a + i)
//     }
//     printf("\n");
//     return 0;
// }

// int main()
// {
//     // int a[3];
//     // printf("%ld\n",sizeof(a));
//     // //数组单个元素
//     // //数组下标：代表数组中的元素序号，从0开始
//     // a[0] = 1;
//     // a[1] = 2;
//     // a[2] = 3;
//     //访问越界：数组访问的下标超过了最大限度

//     //数组通过下标循环访问
//     // for(int i = 0; i < 3; i++)
//     // {
//     //     printf("%d ",a[i]);
//     // }
//     // printf("\n");
//     // return 0;


//     //静态数组：容量不能变化的数组
//     //数组的地址是连续的
//     // int a[Size] ={1,2,3};
//     // for(int i = 0; i < 3; i++)
//     // {
//     //     printf("%d %p\n",a[i],&a[i]);
//     // }
//     // //printf("\n");
//     // return 0;

//     // int a[] ={1,2,3,6,1,34,2,5,9};
//     // // 数组的容量：数组的总大小 / 单个元素的大小
//     // for(int i = 0; i < ArraySize(a); i++)
//     // {
//     //     printf("%d %p\n",a[i],&a[i]);
//     // }
//     // //printf("\n");
//     // return 0;

 
    
//     return 0;
// }


int main()
{
    int a[Size] = {1,2,3,4};
    printf("%p %p %p\n",a,&a,&a[0]);
    printf("%p %p %p\n", a + 1, &a + 1, &a[0] + 1);
    return 0;
}